package ar.edu.unsam.algo3.plantasvszombies.ui.ApplicationModels

import ar.edu.unsam.algo3.plantasvszombies.dominio.Fila
import ar.edu.unsam.algo3.plantasvszombies.dominio.Jardin
import ar.edu.unsam.algo3.plantasvszombies.dominio.JardinZen
import ar.edu.unsam.algo3.plantasvszombies.dominio.Mejora
import ar.edu.unsam.algo3.plantasvszombies.homes.HomePlantas
import java.util.List
import org.uqbar.commons.utils.ApplicationContext
import org.uqbar.commons.utils.Observable
import org.uqbar.commons.utils.Transactional

@Observable
@Transactional
class JardinAppModel {

	@Property Jardin jardin
	@Property List<Mejora> mejorasPosibles
	@Property List<Fila> misFilas
	@Property int filasLibres
	@Property boolean activarNvaFila
	@Property Fila filaSeleccionada
	@Property Fila filaresguardo

	new() {
		iniciar
	}

	def iniciar() {
		this.jardin = new Jardin
		jardin.tiposPosibles = homePlantas.jardines
		actualizar
	}

	def resguardar() {
		filaresguardo = new Fila
		filaresguardo.jardin = filaSeleccionada.jardin
		filaresguardo.jardinZen = filaSeleccionada.jardinZen
		filaSeleccionada.plantas.forEach[e | filaresguardo.plantas.add(e)]
	}

	def restaurar() {
		filaSeleccionada.jardin = filaresguardo.jardin
		filaSeleccionada.jardinZen = filaresguardo.jardinZen
		filaSeleccionada.plantas = filaresguardo.plantas
		actualizar
	}

	def actualizar() {
		misFilas = null
		misFilas = jardin.filas
		filasLibres = jardin.filasDisponibles
		activarNvaFila = filasLibres > 0
	}

	def HomePlantas getHomePlantas() {
		ApplicationContext::instance.getSingleton(typeof(JardinZen))
	}
}
